In [ ]:
import sys
import os
sys.path.insert(1, os.path.join(os.path.pardir, "ipython_doctester"))
from sympy import *
from ipython_doctester import test
x, y, z = symbols('x y z')
For each exercise, fill in the function according to its docstring. Execute the cell to see if you did it right.
Create the following objects without using any mathematical operators like +
, -
, *
, /
, or **
by explicitly using the classes Add
, Mul
, and Pow
. You may use x
instead of Symbol('x')
and 4
instead of Integer(4)
.
In [ ]:
@test
def explicit_classes1():
"""
Returns the expression x**2 + 4*x*y*z, built using SymPy classes explicitly.
>>> explicit_classes1()
x**2 + 4*x*y*z
"""
In [ ]:
@test
def explicit_classes2():
"""
Returns the expression x**(x**y), built using SymPy classes explicitly.
>>> explicit_classes2()
x**(x**y)
"""
In [ ]:
@test
def explicit_classes3():
"""
Returns the expression x - y/z, built using SymPy classes explicitly.
>>> explicit_classes3()
x - y/z
"""
In [ ]:
expr = x**2 - y*(2**(x + 3) + z)
Use nested .args
calls to get the 3 in expr.
In [ ]:
@test
def nested_args():
"""
Get the 3 in the above expression.
>>> nested_args()
3
"""
Write a post-order traversal function that prints each node.
In [ ]:
@test
def post(expr):
"""
Post-order traversal
>>> expr = x**2 - y*(2**(x + 3) + z)
>>> post(expr)
-1
y
2
3
x
x + 3
2**(x + 3)
z
2**(x + 3) + z
-y*(2**(x + 3) + z)
x
2
x**2
x**2 - y*(2**(x + 3) + z)
"""
In [ ]:
for i in postorder_traversal(expr):
print i